#!/bin/bash

# 创建备份目录
BACKUP_DIR="/tmp/longimagereader_backup_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"

echo "开始移除 qDebug 语句..."
echo "备份目录: $BACKUP_DIR"

# 查找所有包含 qDebug 的 C++ 文件
find /Users/ethan/Codes/longimagereader -name "*.cpp" -o -name "*.h" | while read file; do
    if grep -q "qDebug" "$file"; then
        echo "处理文件: $file"
        
        # 备份原文件
        cp "$file" "$BACKUP_DIR/"
        
        # 创建临时文件
        temp_file=$(mktemp)
        
        # 使用 awk 处理多行 qDebug 语句
        awk '
        BEGIN { in_qdebug = 0; brace_count = 0 }
        {
            # 检查是否开始 qDebug 语句
            if (/^[[:space:]]*qDebug[[:space:]]*\(/ || /^[[:space:]]*qDebug[[:space:]]*<</) {
                in_qdebug = 1
                brace_count = 0
                # 计算当前行的括号数量
                gsub(/[^()]/, "", $0)
                brace_count = gsub(/\(/, "", $0) - gsub(/\)/, "", $0)
                
                # 如果当前行就结束了，跳过
                if (brace_count <= 0 && /;/) {
                    in_qdebug = 0
                    next
                }
                next
            }
            
            # 如果在 qDebug 语句中
            if (in_qdebug) {
                # 计算括号数量
                gsub(/[^()]/, "", $0)
                brace_count += gsub(/\(/, "", $0) - gsub(/\)/, "", $0)
                
                # 如果遇到分号且括号平衡，结束 qDebug 语句
                if (/;/ && brace_count <= 0) {
                    in_qdebug = 0
                }
                next
            }
            
            # 不在 qDebug 语句中，输出当前行
            print
        }' "$file" > "$temp_file"
        
        # 替换原文件
        mv "$temp_file" "$file"
    fi
done

echo "完成！备份文件保存在: $BACKUP_DIR"
echo "如需恢复，请运行:"
echo "cp $BACKUP_DIR/* /Users/ethan/Codes/longimagereader/"
